
using System;
using System.Data;
using System.Data.SqlClient;
using Csla;
using Csla.Data;
using Csla.Validation;
using SariturIntranetLibrary.RM;
using SariturIntranetLibrary.Usuarios;

namespace SariturIntranetLibrary.Servicos
{
    [Serializable()]
    public class ServicoChildInfo : Csla.ReadOnlyBase<ServicoChildInfo>
    {

        #region Business Properties and Methods

        //declare members

        private Guid _id = Guid.NewGuid();

        private Guid _usuarioAutorId = Guid.Empty;

        private Funcionario _usuarioAutor;

        private SmartDate _dataCriacao = new SmartDate(false);

        private string _localDeAtendimento = string.Empty;

        private string _descricaoDoProblema = string.Empty;

        private Guid _anexosId = Guid.Empty;

        private int _setorId = 0;

        private string _setor = string.Empty;

        private Guid _usuarioResponsavelId = Guid.Empty;

        private Funcionario _usuarioResponsavel;

        private SmartDate _dataAtendimentoInicio = new SmartDate(false);

        private string _solicitacaoTecnicao = string.Empty;

        private string _solicitacaoTecnicaResposta = string.Empty;

        private Guid _solicitacaoTecnicaAnexosId = Guid.Empty;

        private SmartDate _solicitacaoTecnicaData = new SmartDate(false);

        private string _relatorioTecnicoFinal = string.Empty;

        private SmartDate _dataAtendimentoFina = new SmartDate(false);

        private SmartDate _dataAtendimentoConclusao = new SmartDate(false);

        private SmartDate _reaberturaData = new SmartDate(false);

        private string _reaberturaMotivo = string.Empty;

        private string _reaberturaRelatorioTecnico = string.Empty;

        private int _estadoId = 0;

        private string _estado = string.Empty;

        private string _protocolo = string.Empty;

        [System.ComponentModel.DataObjectField(true, false)]
        public Guid Id
        {
            get
            {
                CanReadProperty("Id", true);
                return _id;
            }
        }

        public Guid UsuarioAutorId
        {
            get
            {
                CanReadProperty("UsuarioAutorId", true);
                return _usuarioAutorId;
            }
        }

        public Funcionario UsuarioAutor
        {
            get
            {
                CanReadProperty("UsuarioAutor", true);
                return _usuarioAutor;
            }
        }

        public DateTime DataCriacao
        {
            get
            {
                CanReadProperty("DataCriacao", true);
                return _dataCriacao.Date;
            }
        }

        public string DataCriacaoString
        {
            get
            {
                CanReadProperty("DataCriacaoString", true);
                return _dataCriacao.Text;
            }
        }

        public string DataAtendidaEm
        {
            get
            {
                return _dataAtendimentoFina.Date.ToString("dd/MM/yyyy");
            }
        }

        public string LocalDeAtendimento
        {
            get
            {
                CanReadProperty("LocalDeAtendimento", true);
                return _localDeAtendimento;
            }
        }

        public string DescricaoDoProblema
        {
            get
            {
                CanReadProperty("DescricaoDoProblema", true);
                return _descricaoDoProblema;
            }
        }

        public Guid AnexosId
        {
            get
            {
                CanReadProperty("AnexosId", true);
                return _anexosId;
            }
        }

        public int SetorId
        {
            get
            {
                CanReadProperty("SetorId", true);
                return _setorId;
            }
        }

        public string Setor
        {
            get
            {
                CanReadProperty("Setor", true);
                return _setor;
            }
        }

        public Guid UsuarioResponsavelId
        {
            get
            {
                CanReadProperty("UsuarioResponsavelId", true);
                return _usuarioResponsavelId;
            }
        }

        public Funcionario UsuarioResponsavel
        {
            get
            {
                CanReadProperty("UsuarioResponsavel", true);
                return _usuarioResponsavel;
            }
        }

        public DateTime DataAtendimentoInicio
        {
            get
            {
                CanReadProperty("DataAtendimentoInicio", true);
                return _dataAtendimentoInicio.Date;
            }
        }

        public string DataAtendimentoInicioString
        {
            get
            {
                CanReadProperty("DataAtendimentoInicioString", true);
                return _dataAtendimentoInicio.Text;
            }
        }

        public string SolicitacaoTecnicao
        {
            get
            {
                CanReadProperty("SolicitacaoTecnicao", true);
                return _solicitacaoTecnicao;
            }
        }

        public string SolicitacaoTecnicaResposta
        {
            get
            {
                CanReadProperty("SolicitacaoTecnicaResposta", true);
                return _solicitacaoTecnicaResposta;
            }
        }

        public Guid SolicitacaoTecnicaAnexosId
        {
            get
            {
                CanReadProperty("SolicitacaoTecnicaAnexosId", true);
                return _solicitacaoTecnicaAnexosId;
            }
        }

        public DateTime SolicitacaoTecnicaData
        {
            get
            {
                CanReadProperty("SolicitacaoTecnicaData", true);
                return _solicitacaoTecnicaData.Date;
            }
        }

        public string SolicitacaoTecnicaDataString
        {
            get
            {
                CanReadProperty("SolicitacaoTecnicaDataString", true);
                return _solicitacaoTecnicaData.Text;
            }
        }

        public string RelatorioTecnicoFinal
        {
            get
            {
                CanReadProperty("RelatorioTecnicoFinal", true);
                return _relatorioTecnicoFinal;
            }
        }

        public DateTime DataAtendimentoFina
        {
            get
            {
                CanReadProperty("DataAtendimentoFina", true);
                return _dataAtendimentoFina.Date;
            }
        }

        public string DataAtendimentoFinaString
        {
            get
            {
                CanReadProperty("DataAtendimentoFinaString", true);
                return _dataAtendimentoFina.Text;
            }
        }

        public DateTime DataAtendimentoConclusao
        {
            get
            {
                CanReadProperty("DataAtendimentoConclusao", true);
                return _dataAtendimentoConclusao.Date;
            }
        }

        public string DataAtendimentoConclusaoString
        {
            get
            {
                CanReadProperty("DataAtendimentoConclusaoString", true);
                return _dataAtendimentoConclusao.Text;
            }
        }

        public DateTime ReaberturaData
        {
            get
            {
                CanReadProperty("ReaberturaData", true);
                return _reaberturaData.Date;
            }
        }

        public string ReaberturaDataString
        {
            get
            {
                CanReadProperty("ReaberturaDataString", true);
                return _reaberturaData.Text;
            }
        }

        public string ReaberturaMotivo
        {
            get
            {
                CanReadProperty("ReaberturaMotivo", true);
                return _reaberturaMotivo;
            }
        }

        public string ReaberturaRelatorioTecnico
        {
            get
            {
                CanReadProperty("ReaberturaRelatorioTecnico", true);
                return _reaberturaRelatorioTecnico;
            }
        }

        public int EstadoId
        {
            get
            {
                CanReadProperty("EstadoId", true);
                return _estadoId;
            }
        }

        public string Estado
        {
            get
            {
                CanReadProperty("Estado", true);
                return _estado;
            }
        }

        public string Protocolo
        {
            get
            {
                CanReadProperty("Protocolo", true);
                return _protocolo;
            }
        }

        protected override object GetIdValue()
        {
            return _id;
        }

        #endregion //Business Properties and Methods

        #region Authorization Rules
        protected override void AddAuthorizationRules()
        {
            //TODO: Define authorization rules in ServicoChildInfo
            //AuthorizationRules.AllowRead("Id", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("UsuarioAutorId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataCriacao", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataCriacaoString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("LocalDeAtendimento", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DescricaoDoProblema", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("AnexosId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SetorId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Setor", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("UsuarioResponsavelId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoInicio", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoInicioString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SolicitacaoTecnicao", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SolicitacaoTecnicaResposta", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SolicitacaoTecnicaAnexosId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SolicitacaoTecnicaData", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("SolicitacaoTecnicaDataString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("RelatorioTecnicoFinal", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoFina", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoFinaString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoConclusao", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataAtendimentoConclusaoString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("ReaberturaData", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("ReaberturaDataString", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("ReaberturaMotivo", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("ReaberturaRelatorioTecnico", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("EstadoId", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Estado", "ServicoChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Protocolo", "ServicoChildInfoReadGroup");

        }

        #endregion //Authorization Rules

        #region Factory Methods
        internal static ServicoChildInfo GetServicoChildInfo(SafeDataReader dr)
        {
            return new ServicoChildInfo(dr);
        }

        private ServicoChildInfo(SafeDataReader dr)
        {
            Fetch(dr);
        }
        #endregion //Factory Methods


        #region Data Access

        #region Data Access - Fetch
        private void Fetch(SafeDataReader dr)
        {
            FetchObject(dr);

            //load child object(s)
            FetchChildren(dr);

        }

        internal void AtualizarUsuarios()
        {
            _usuarioAutor = Funcionario.GetFuncionario(Usuario.GetUsuario(_usuarioAutorId).Cpf);
            if (_usuarioResponsavelId != Guid.Empty)
                _usuarioResponsavel = Funcionario.GetFuncionario(Usuario.GetUsuario(_usuarioResponsavelId).Cpf);
            else
                _usuarioResponsavel = Funcionario.GetFuncionario("");
        }

        private void FetchObject(SafeDataReader dr)
        {
            _id = dr.GetGuid("Id");
            _usuarioAutorId = dr.GetGuid("UsuarioAutorId");
            _dataCriacao = dr.GetSmartDate("DataCriacao", _dataCriacao.EmptyIsMin);
            _localDeAtendimento = dr.GetString("LocalDeAtendimento");
            _descricaoDoProblema = dr.GetString("DescricaoDoProblema");
            _anexosId = dr.GetGuid("AnexosId");
            _setorId = dr.GetInt32("SetorId");
            _setor = dr.GetString("Setor");
            _usuarioResponsavelId = dr.GetGuid("UsuarioResponsavelId");
            _dataAtendimentoInicio = dr.GetSmartDate("DataAtendimentoInicio", _dataAtendimentoInicio.EmptyIsMin);
            _solicitacaoTecnicao = dr.GetString("SolicitacaoTecnicao");
            _solicitacaoTecnicaResposta = dr.GetString("SolicitacaoTecnicaResposta");
            _solicitacaoTecnicaAnexosId = dr.GetGuid("SolicitacaoTecnicaAnexosId");
            _solicitacaoTecnicaData = dr.GetSmartDate("SolicitacaoTecnicaData", _solicitacaoTecnicaData.EmptyIsMin);
            _relatorioTecnicoFinal = dr.GetString("RelatorioTecnicoFinal");
            _dataAtendimentoFina = dr.GetSmartDate("DataAtendimentoFina", _dataAtendimentoFina.EmptyIsMin);
            _dataAtendimentoConclusao = dr.GetSmartDate("DataAtendimentoConclusao", _dataAtendimentoConclusao.EmptyIsMin);
            _reaberturaData = dr.GetSmartDate("ReaberturaData", _reaberturaData.EmptyIsMin);
            _reaberturaMotivo = dr.GetString("ReaberturaMotivo");
            _reaberturaRelatorioTecnico = dr.GetString("ReaberturaRelatorioTecnico");
            _estadoId = dr.GetInt32("EstadoId");
            _estado = dr.GetString("Estado");
            _protocolo = dr.GetString("Protocolo");
        }

        private void FetchChildren(SafeDataReader dr)
        {
        }
        #endregion //Data Access - Fetch
        #endregion //Data Access
    }
}
